<?php

class Model_PlatonicaIDuser extends RL_Model
{
	
	/**
	 * Считывает по URL поля пользовательского профиля, если не получается, то вернет false
	 *
	 * @return array
	 * @author Alexander Sibiryakov
	 **/
	public function lookupUrl( $url ) {
		$data = false;

		do {
			// $data == false;
			$handle = fopen($url, "r");
			if (!$handle) break; // нет файла -- пошли нах. False
		
			$contents = '';
			while (!feof($handle)) {
				$contents .= fread($handle, 8192);
			}
			// $data == false;
			if (!$contents) break; // контент пуст -- пошли нах. Fasle

			$doc = new DOMDocument('1.0', 'UTF-8');

			// We don't want to bother with white spaces
			$doc->preserveWhiteSpace = false;

			//var_dump($contents);
			$doc->LoadHTML( $contents );

			$xpath = new DOMXPath( $doc );

			// Найдем элемент со ccылкой на platonicaid
			$query = '/html/head/link[@rel="platonica.text_profile"]';
			$entries = $xpath->query($query);
			
			// $data == false;
			if (!$entries->item(0)) break; // контент пуст -- пошли нах. False

			$pid_url = $entries->item(0)->getAttribute("href");
			// фетчим параметры автора
			unset($handle); unset($contents);
			$handle = fopen($pid_url, "r");
			// $data == false;
			if (!$handle) break; // нет ссылки на профиль -- пошли нах. False

			$data = array();
			$lines = array();
			while (!feof($handle)) {
				$lines[] = fgets($handle);
			}

			// $data == array();
			if (!$lines) break; // профиль пуст. сранно. вернем array();

			foreach ($lines as $line) {
				list($key, $val) = split(":", $line,2);
				if (strlen(trim($key))>0) $data[$key] = trim($val);
			}
			// $data == array('key' => 'val',);
		} while (false);

		return $data;
	}
	
	/**
	 * Создает пользователя на входе $data массив с полями которые нужно сохранить, перед тем как сохранит проверит нет ли его там
	 *
	 * @return fobject
	 * @author Alexander Sibiryakov
	 **/
	public function createUser( $data ) {
		$user_url = $data['platonica.profile_url'];
		
		$result = $this->getUser( $user_url );
		if ($result instanceof fobject) {
			return $result;
		} else {
			$newuser = $this->rh->ctx->store->create('fpid_user', $data );
			$newuser->save();
			$newuser->insense("pid_user");
			return $newuser;
		}
	}
	
	/**
	 * Входным параметром может быть как id-шник по таблице пользователей, так и строка-url с сервера
	 *
	 * @return fobject
	 * @author Alexander Sibiryakov
	 **/
	public function getUser( $user ) {
		if (is_numeric($user)) {
			// нам прислали id-шник
			$query['pid_user']['oid']['=='] = $user;
		} elseif (strpos($user, "http") !== false) {
			$query['pid_user']['platonica.profile_url']['=='] = trim($user);
		}
		// поиск автора
		$rs = $this->rh->ctx->store->find( $query );
		$user = $rs->next();
		return $user;		
	}
}
